package com.me.study.javaCore.genericity;

import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;

/**
 * Java 泛型测试类：
 *
 * @author ME
 * @date 2021/5/16
 */
public class TestGenericity {

    public static void main(String[] args) {
        Foo<String> foo = new Foo<String>() {
        };
        // 在类的外部这样获取
        Type type = ((ParameterizedType) foo.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        System.out.println(type);
        // 在类的内部这样获取
        System.out.println(foo.getTClass());

        System.out.println("`new Foo<String>(){}` 不带 `{}` 则报错");
        Foo<String> foo2 = new Foo<>();
        // 在类的外部这样获取
        Type type2 = ((ParameterizedType) foo2.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        System.out.println(type2);
        // 在类的内部这样获取
        System.out.println(foo2.getTClass());
    }

}
